package com.controleFamiliar.dao;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import com.controleFamiliar.pojo.Receita;
import com.controleFamiliar.util.HibernateUtil;

public class ReceitaDAO extends GenericDAO<Integer, Receita>{
	
	public void salvarReceita(Receita receita) throws Exception {
		try{
			Session session = HibernateUtil.getSessionFactory().openSession();
			Receita novaReceita = new Receita();
			novaReceita = receita;
			session.save(novaReceita);
			session.flush();
		}catch (Exception e){
			e.printStackTrace();
		}finally{
			try{HibernateUtil.getSessionFactory().close();}catch(Exception e){}
		}
	}
	
	public void removerReceita(Integer codReceita) throws Exception {
		try{
			Session session = HibernateUtil.getSessionFactory().openSession();
			String hql = "Delete From Receita where codReceita = :codReceita";
			Query query = session.createQuery(hql);
			query.setInteger("codReceita", codReceita);
			int result = query.executeUpdate();
			System.out.println("Rows affected: " + result);
		}catch (Exception e){
			e.printStackTrace();
		}finally{
			try{HibernateUtil.getSessionFactory().close();}catch(Exception e){}
		}
	}
	
	@SuppressWarnings("unchecked")
	public List<Receita> listarTodasReceitas(){
		List<Receita> lista = new ArrayList<Receita>();
		try{
			Session session = HibernateUtil.getSessionFactory().openSession();
			StringBuilder sb = new StringBuilder();
			sb.append("FROM Receita");
			Query q = session.createQuery(sb.toString());
			lista = q.list();
		}catch (Exception e){
			e.printStackTrace();
		}finally{
			try{HibernateUtil.getSessionFactory().close();}catch(Exception e){}
		}
		return lista;
	}
	
	@SuppressWarnings("unchecked")
	public List<Receita> listarReceitasPorCategoria(Integer codigo){
		List<Receita> lista = new ArrayList<Receita>();
		try{
			Session session = HibernateUtil.getSessionFactory().openSession();
			StringBuilder sb = new StringBuilder();
			sb.append("FROM Receita where categoriaReceita.codCategoriaReceita = :codigo");			
			Query q = session.createQuery(sb.toString());
			q.setInteger("codigo", codigo);
			lista = q.list();
		}catch (Exception e){
			e.printStackTrace();
		}finally{
			try{HibernateUtil.getSessionFactory().close();}catch(Exception e){}
		}
		return lista;
	}
	
	@SuppressWarnings("unchecked")
	public List<Receita> listarReceitasPorPeriodo(Date dtInicio, Date dtFim){
		List<Receita> lista = new ArrayList<Receita>();
		try{
			Session session = HibernateUtil.getSessionFactory().openSession();
			StringBuilder sb = new StringBuilder();
			sb.append("FROM Receita where dataReceita >= :dtInicio and dataReceita <= :dtFim");			
			Query q = session.createQuery(sb.toString());
			q.setDate("dtInicio", dtInicio);
			q.setDate("dtFim", dtFim);
			lista = q.list();
		}catch (Exception e){
			e.printStackTrace();
		}finally{
			try{HibernateUtil.getSessionFactory().close();}catch(Exception e){}
		}
		return lista;
	}

}
